package ligacoes;

import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.ArrayList;

import cliente.Cliente;

import dados.Accao;
import dados.Jogador;
import dados.Stock;

public class Ligacao{
	
	private Cliente cliente;
	private Jogador jogador;
	private ArrayList<Stock> stocks;
	private int row;

	private Socket socket;
	private ObjectInputStream in;
	private ObjectOutputStream out;

	public Ligacao(Cliente cliente, Socket socket) throws IOException{
		this.cliente = cliente;
		this.socket = socket;
		
		OutputStream os = socket.getOutputStream();
		out = new ObjectOutputStream(os);
		InputStream is = socket.getInputStream();
		in = new ObjectInputStream(is);
	}

	@SuppressWarnings("unchecked")
	public void comando(String comando, String info){
		try {
			out.flush();
			out.reset();
			if (comando.equals("update")) {
				
				out.writeObject("update");
				stocks = (ArrayList<Stock>) in.readObject();
				cliente.setStocks(stocks);							
				
			} else if (comando.equals("autenticacao")) {
				out.writeObject(info);
				jogador = (Jogador) in.readObject();
			} else if (comando.equals("guardar")){
				out.writeObject(jogador);
				row = (int) in.readObject();
			}
		} catch (ClassNotFoundException | IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public void apagarAccao(Jogador jogador, Accao accao){
		try {
			out.flush();
			out.reset();
			out.writeObject("ApagarAccao");
			Object obj = in.readObject();
			if(obj instanceof String){
				out.writeObject(jogador);
				out.writeObject(accao);
			}
		} catch (ClassNotFoundException | IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public String adicionarEmpresa(String sigla){
		try {
			out.flush();
			out.reset();
			out.writeObject("AdicionarEmpresa");
			Object obj = in.readObject();
			if(obj instanceof String){
				out.writeObject(sigla);
				Object obj2 = in.readObject();
				if(obj2 instanceof String){
					String msg = (String) obj2;
					return msg;
				}
			}
		} catch (ClassNotFoundException | IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return null;
	}

	public void closeSocket(){
		try {
			socket.close();
		} catch (IOException ex) {
			ex.printStackTrace();
		}
	}
	
	public Jogador getJogador(){
		return jogador;
	}
	
	public void setJogador(Jogador jogador){
		this.jogador = jogador;
	}
	
	public ArrayList<Stock> getStocks(){
		return stocks;
	}
	
	public int getRow(){
		return row;
	}
}